package com.buer.service.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringEscapeUtils;

/**
 * 应用系统字符串处理工具
 *
 */
public class ApplicaitonStringUtil {

	/**
	 * 空字符串
	 */
	public static final String EMPTY = "";

	/**
	 * 更多省略号
	 */
	public static final String MORE = "...";

	/**
	 * 字符串是否为非空字符串
	 *
	 * @param str
	 *            字符串
	 * @return
	 */
	public static boolean isNotEmpty(String str) {
		if (null != str && str.trim().length() != 0) {
			return true;
		}
		return false;
	}

	/**
	 * 字符串是否为空字符串
	 *
	 * @param str
	 *            字符串
	 * @return
	 */
	public static boolean isEmpty(String str) {
		if (null == str || str.trim().length() == 0) {
			return true;
		}
		return false;
	}

	/**
	 * 功能描述: <br>
	 * null转""
	 *
	 * @param value
	 *            String
	 * @return 转换后的值
	 */
	public static String nullToEmpty(Object value) {
		return value == null ? EMPTY : String.valueOf(value);
	}

	/**
	 * 截取所需最大长度的字符串，超出最大长度显示...
	 *
	 * @param str
	 *            原字符串
	 * @param maxLength
	 *            所需最大长度
	 * @return
	 */
	public static String subString(String str, int maxLength) {
		// 原字符串为空，或者所需最大长度小于等于0，返回空字符串
		if (isEmpty(str) || maxLength <= 0) {
			return EMPTY;
		}

		// 所需最大长度大于原字符串长度，返回原字符串
		if (str.length() <= maxLength) {
			return str;
		} else {
			return (str.substring(0, maxLength) + MORE);
		}
	}

	/**
	 * 格式化浮点字符串，保留size小数位
	 *
	 * @param str
	 *            原数据
	 * @param size
	 *            保留位数
	 * @return
	 */
	public static String formatFloatStr(String str, int size) {
		if (isEmpty(str)) {
			return EMPTY;
		}

		if (str.contains(".")) {
			String[] data = str.split("\\.");
			// 非法格式返回原数据
			if (data.length != 2) {
				return str;
			}

			// 位数不足补0
			if (data[1].length() < size) {
				String dotAfter = data[1];
				while (dotAfter.length() > size) {
					dotAfter += "0";
				}
				return data[0] + "." + dotAfter;
			} else {
				// 超过位数截位
				return data[0] + "." + data[1].substring(0, size);
			}

		} else {
			return str;
		}
	}

	/**
	 * 对获取请求的头部信息进行转码
	 *
	 * @param request
	 *            HttpServletRequest
	 * @param name
	 *            对象
	 * @return String
	 */
	public static String getHeader(HttpServletRequest request, String name) {
		return StringEscapeUtils.escapeHtml4(request.getHeader(name));
	}

	/**
	 * 对获取请求的参数进行转码
	 *
	 * @param request
	 *            HttpServletRequest
	 * @param name
	 *            对象
	 * @return String
	 */
	public static String getParameter(HttpServletRequest request, String name) {
		return StringEscapeUtils.escapeHtml4(request.getParameter(name));
	}

	/**
	 * 组装Map的返回对象
	 *
	 * @param responseCode
	 * @param responseMsg
	 * @return Map<String, Object>
	 */
	public static Map<String, Object> assembleMap(String responseCode, String responseMsg) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("responseCode", responseCode);
		map.put("responseMsg", responseMsg);
		return map;
	}
	
	/**
	 * 流水号(32 数字与字符)
	 *
	 * @return String
	 */
	public static String getSerialNo() {
		return UUID.randomUUID().toString().replace("-", "");
	}

    /**
     * 17位时间字符
     */
    public static String num17BaseTime(){
        String formatReg = "yyyyMMddHHmmssSSS";
        SimpleDateFormat dateFormat = new SimpleDateFormat(formatReg);
        return dateFormat.format(new Date());
    }
    
    /**
     * 生成订单号
     *
     * @return 22位字符
     */
    public static String num20BaseTime(){
    	int last5Num = (int)(Math.random()* Math.pow(10D, 5D));
    	String end = String.valueOf((last5Num + 100000));
		return num17BaseTime() + end.substring(1);
    }
}